package com.linyaonan.leetcode.medium._2095;

/**
 *
 * 给你一个链表的头节点 head 。删除 链表的 中间节点 ，并返回修改后的链表的头节点 head 。
 *
 * 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点（下标从 0 开始），其中 ⌊x⌋ 表示小于或等于 x 的最大整数。
 *
 * 对于 n = 1、2、3、4 和 5 的情况，中间节点的下标分别是 0、1、1、2 和 2 。
 *
 * 输入：head = [1,3,4,7,1,2,6]
 * 输出：[1,3,4,1,2,6]
 * 解释：
 * 上图表示给出的链表。节点的下标分别标注在每个节点的下方。
 * 由于 n = 7 ，值为 7 的节点 3 是中间节点，用红色标注。
 * 返回结果为移除节点后的新链表。
 *
 * @author: Lin
 * @date: 2024/2/23
 */
public class DeleteTheMiddleNodeOfALinkedList {

    public ListNode deleteMiddle(ListNode head) {
        ListNode tmp = new ListNode(-1);
        tmp.next = head;

        ListNode slow = tmp;
        ListNode h = tmp;

        int count = 0;
        while (head != null) {
            head = head.next;
            count++;
        }

        int m = (int) Math.floor((double) count / 2);

        for (int i = 0; i < m; i++) {
            slow = slow.next;
        }

        slow.next = slow.next.next;

        return h.next;

    }

    public ListNode deleteMiddle2(ListNode head) {
        ListNode tmp = new ListNode(-1);
        tmp.next = head;
        ListNode h = tmp;

        while (head != null && head.next != null) {
            head = head.next.next;
            tmp = tmp.next;
        }

        tmp.next = tmp.next.next;

        return h.next;

    }

}
